package AnunciosMVC;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Anuncio {

    protected int id = 0;
    protected String titulo = "";
    protected String texto = "";
    protected float precio = 0;
    protected boolean vendido = false;

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public float getPrecio() {
        return precio;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }

    public boolean isVendido() {
        return vendido;
    }

    public void setVendido(boolean vendido) {
        this.vendido = vendido;
    }

    public int getId() {
        return id;
    }

    protected void setId(int id) {
        this.id = id;
    }

    public boolean getAnuncio(int id) {
        // JDBC driver name and database URL
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        final String DB_URL = "jdbc:mysql://localhost/java";

        //  Database credentials
        final String USER = "root";
        final String PASS = "";

        //Creamos las referencias de conexiones
        Statement stmt = null;
        ResultSet rs = null;
        Connection conn = null;

        boolean correcto = false;

        try {
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();

            String sql = "SELECT * from anuncios where id=" + id;

            rs = stmt.executeQuery(sql);

            if (rs.next()) {
                this.setId(rs.getInt("id"));
                this.setTitulo(rs.getString("titulo"));
                this.setTexto(rs.getString("texto"));
                this.setPrecio(rs.getFloat("precio"));
                this.setVendido(rs.getBoolean("vendido"));
                correcto = true;
            }
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return correcto;
    }

    /**
     * Actualiza los datos en la base de datos o crea un anuncio nuevo, seg�n si
     * el id es igual o distinto de cero
     *
     * @return true si se ha actualizado de forma correcta
     */
    public boolean saveAnuncio() {
        if (this.id != 0) {
            //Actualizo el anuncio
            return saveAnuncio(this.id, this.titulo, this.texto, this.precio, this.vendido);
        } else {
            //Inserto un anuncio nuevo
            return saveAnuncio(this.titulo, this.texto, this.precio, this.vendido);
        }
    }

    public boolean saveAnuncio(String titulo, String texto, float precio, boolean vendido) {
        // JDBC driver name and database URL
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        final String DB_URL = "jdbc:mysql://localhost/java";

        //  Database credentials
        final String USER = "root";
        final String PASS = "";

        //Creamos las referencias de conexiones
        Statement stmt = null;
        Connection conn = null;

        boolean correcto = false;

        try {
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();

            String sql = "INSERT INTO anuncios VALUES "
                    + "(default,'"
                    + titulo
                    + "','"
                    + texto + "',"
                    + precio + ","
                    + vendido + ")";
            /*StringBuilder sb = new StringBuilder();
             sb.append("insert into anuncios values ");
             sb.append("(default,'");
             sb.append(titulo);
             sb.append("','");
             sb.append(texto);
             sb.append("',");
             sb.append(precio);
             sb.append(",");
             sb.append(vendido);
             sb.append(")");*/

            if (stmt.executeUpdate(sql) == 1) {
                correcto = true;
            }

            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return correcto;
    }

    /**
     * actualiza el anuncio con el mismo id que le pasamos
     *
     * @param titulo
     * @param texto
     * @param precio
     * @param vendido
     * @return
     */
    public boolean saveAnuncio(int id, String titulo, String texto, float precio, boolean vendido) {
        // JDBC driver name and database URL
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        final String DB_URL = "jdbc:mysql://localhost/java";

        //  Database credentials
        final String USER = "root";
        final String PASS = "";

        //Creamos las referencias de conexiones
        Statement stmt = null;
        Connection conn = null;

        boolean correcto = false;

        try {
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();

            String sql = "UPDATE anuncios SET "
                    + "titulo = '" + titulo
                    + "', texto = '" + texto
                    + "', precio =" + precio
                    + ", vendido = " + vendido
                    + " WHERE id = " + id;

            if (stmt.executeUpdate(sql) == 1) {
                correcto = true;
            }

            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return correcto;
    }

    public boolean deleteAnuncio(int id) {
        // JDBC driver name and database URL
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        final String DB_URL = "jdbc:mysql://localhost/java";

        //  Database credentials
        final String USER = "root";
        final String PASS = "";

        //Creamos las referencias de conexiones
        Statement stmt = null;
        Connection conn = null;

        boolean correcto = false;

        try {
            // Register JDBC driver
            Class.forName(JDBC_DRIVER);

            conn = DriverManager.getConnection(DB_URL, USER, PASS);
            stmt = conn.createStatement();

            String sql = "DELETE FROM anuncios WHERE id=" + id;

            if (stmt.executeUpdate(sql) == 1) {
                correcto = true;
            }
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return correcto;
    }
}
